package com.atguigu.reflect;

public class Demo04Field {

//    @Test
//    public void testGetFields() {
//        // 测试目标：获取代表成员变量的 Field 对象
//        // 1、获取所有 public 权限的 Field 对象
//        Field[] fieldsPublic = Tiger.class.getFields();
//
//        for (Field field : fieldsPublic) {
//            System.out.println("field = " + field);
//        }
//
//        System.out.println("========================");
//
//        // 2、获取所有 Field 对象
//        Field[] declaredFields = Tiger.class.getDeclaredFields();
//        for (Field declaredField : declaredFields) {
//            System.out.println("declaredField = " + declaredField);
//        }
//    }
//
//    @Test
//    public void testGetSingleOneField() throws NoSuchFieldException {
//        // 测试目标：精确获取某一个代表成员变量的 Field 对象
//        Field tigerName = Tiger.class.getDeclaredField("tigerName");
//        System.out.println("tigerName = " + tigerName);
//
//        Field tigerSchoolName = Tiger.class.getDeclaredField("tigerSchoolName");
//        System.out.println("tigerSchoolName = " + tigerSchoolName);
//    }
//
//    @Test
//    public void testGetAndSetFieldValue() throws NoSuchFieldException, IllegalAccessException {
//        // 测试目标：针对 private 权限的 Field 值
//        Field tigerNameField = Tiger.class.getDeclaredField("tigerName");
//
//        // 1、突破访问权限
//        tigerNameField.setAccessible(true);
//
//        // 2、设置值
//        // 参数 1：当前成员变量所属的对象
//        Tiger tiger = new Tiger();
//
//        // 参数 2：要给成员变量设置的值
//        tigerNameField.set(tiger, "big tiger~~~");
//
//        // 3、读取值
//        // 参数：当前成员变量所属的对象
//        Object fieldValue = tigerNameField.get(tiger);
//        System.out.println("fieldValue = " + fieldValue);
//
//        // 4、打印对象本身
//        System.out.println("tiger = " + tiger);
//
//    }
}
